#pragma once
#include <map>
#include <string>

namespace detail {
class MultiBrokerStat {
  // 此类是为了快速统计过滤后的成交记录中的经纪公司ID的个数
  // 旧版需要全部扫描数据才能得出结论
  // 改版后,最初需要全扫描,后续中间更新,只需要维护此数据结构即可快速得出结论
  typedef std::string CompanyId;
  typedef int RecordCount;
  typedef std::map<CompanyId, RecordCount> CompanyIdCountMap;
  bool
      m_dirty;  // 为true,表示m_multi需要重新计算,在CBondDealList.GetRecords中重新计算;
  CompanyIdCountMap
      m_broker_stat;  // 用于统计当前有多少个broker,key是brokerid,int是对应的个数
  bool m_enable;  // 是否需要统计multi,只有表格中点击ALL时才需要,其他的tab不需要
 public:
  MultiBrokerStat();
  ~MultiBrokerStat();
  int GetCount() const { return m_broker_stat.size(); }
  bool IsMulti() const { return m_broker_stat.size() > 0; }
  bool IsEnable() const { return m_enable; }
  void AddBroker(const char* bondKey, const char* market);
  void RemoveBroker(const char* bondKey, const char* market);
  void Clear(bool enable);

 protected:
  void AddBrokerImpl(const char* bondKey, const char* market);
  void RemoveBrokerImpl(const char* bondKey, const char* market);
};

}  // namespace detail
